In current design practice, an experienced system designer typically allocates specifications for cells of a system by hand. In this regard, the designer may create a simple performance model of the system using, for example, a spreadsheet containing analytic closed formulas. Then, by changing the inputs of the system performance model, the designer may search for a combination of cell-level specifications that strike a balance between achievable cell designs and system performance. The designer may consider a few cell performance corner cases in addition to the nominal case, but the resulting specifications are typically expressed as nominal values or upper and lower bounds.
The current practice of manually performing specification allocation generally has several drawbacks that may lead the designer to choose unachievable or undesirable specifications. First, the process of searching for specifications is typically very time consuming. A designer often has to repeatedly change cell specifications and observe the resulting system performance, as well as maintain corner cases, which significantly multiples the number of tasks that need to be performed. Second, typically the designer's consideration of the specifications is limited to at most a few points at a time, which may cause the designer to overlook of a better solution.
For example, it is often difficult to understand the tradeoff among multiple cell specifications, where tightening one specification may give slack to another. Additionally, it is also typically difficult to recognize cases where a sensitive parameter is undesirably close to a critical boundary. Together, these aforementioned drawbacks make specification allocation a labor-intensive process, which often discourages collaborative efforts among system and cell designers, further increasing the likelihood of an unachievable specification being chosen.